<?php
/**
 * 缩略图静类
 *
 * @author will
 * @version $Id$
 */

class Thumb
{
	/**
	 * 生成缩略图
	 * @param <string> $source_img 原图路径
	 * @param <string> $target_dir 生成目标文件夹
	 * @param <string> $target_name 生成目标文件名，不带后缀的话，会自动补齐后缀
	 * @param <int> $new_width 生成新文件的宽度，默认为原图宽度
	 * @param <int> $new_height 生成新文件的高度，默认为原图高度
	 * @param <boolean> $if_cut 是否剪裁图片，true 为按新高宽剪裁，false 为按比例压缩，保持原比例
	 */
	function genarate($source_img , $target_dir , $target_name , $new_width = 0 , $new_height = 0 , $if_cut = false)
	{
		if(!file_exists($source_img)) return false;
		
		$img_info = getimagesize($source_img);
		if(empty($img_info)) return false;
		
		// 获取图片类型
		switch ($img_info['mime']) {
			case 'image/jpeg' :
				$img_type = 'jpg';
			break;
			
			case 'image/gif' :
				$img_type = 'gif';
			break;
			
			case 'image/png' :
				$img_type = 'png';
			break;
		}
		if(empty($img_type)) return false;
	
		// 图片的完整目标路径
		$tar_url = $target_dir . '/' . $target_name;
		// 判断是否要自动加后缀（如果没有后缀就加一个）
		if(strpos($tar_url , '.jpg') === false && strpos($tar_url , '.gif') === false && strpos($tar_url , '.png') === false) {
			$tar_url .= $img_type;
		}

		// 初始化图片
		if($img_type == 'jpg') $temp_img = imagecreatefromjpeg($source_img);
		if($img_type == 'gif') $temp_img = imagecreatefromgif($source_img);
		if($img_type == 'png') $temp_img = imagecreatefrompng($source_img);
		
		if(empty($temp_img)) return false;
		
		
		// 创建文件夹
		if(!is_dir($target_dir)) {
			mkdir($target_dir , 0777 , true);
			chmod($target_dir , 0777);
		}
	
		// 原始图片的宽和高
		$old_width  = $img_info[0];
		$old_height = $img_info[1];
	
		if(!$new_width || !$new_width){
			$new_width = $old_width;
			$new_height = $old_height;
		}
	
		// 改变前后的图片的比例
		$new_ratio = $new_width / $new_height;
		$old_ratio = $old_width / $old_height;
	
		// 生成新图片的参数
		// 情况一：裁图 则按设置的大小生成目标图片
		if($if_cut) {
			$new_width  = $new_width;
			$new_height = $new_height;
			//高度优先
			if($old_ratio >= $new_ratio)
			{
				$old_width  = $old_height*$new_ratio;
				$old_height = $old_height;
			}
			//宽度优先
			else
			{
				$old_width  = $old_width;
				$old_height = $old_width/$new_ratio;
			}
		}
		//情况二：不裁图 则按比例生成目标图象
		else
		{
			$old_width  = $old_width;
			$old_height = $old_height;
			//高度优先
			if($old_ratio >= $new_ratio)
			{
				$new_width  = $new_width;
				$new_height = $new_width/$old_ratio;
			}
			//宽度优先
			else
			{
				$new_width  = $new_height*$old_ratio;
				$new_height = $new_height;
			}
		}
		//生成新图片
		$new_img = imagecreatetruecolor($new_width , $new_height);
		if($img_type == 'png' || $img_type == 'gif')
		{
			imagealphablending($new_img , false);//取消默认的混色模式
			imagesavealpha($new_img , true);//设定保存完整的 alpha 通道信息
		}
		imagecopyresampled($new_img , $temp_img , 0 , 0 , 0 , 0 , $new_width , $new_height , $old_width , $old_height);
	
		if($img_type == 'jpg') imagejpeg($new_img , $tar_url);
		if($img_type == 'gif') imagegif($new_img , $tar_url);
		if($img_type == 'png') imagepng($new_img , $tar_url);
	
		imagedestroy($new_img);
		
		$img_info['name'] = $target_name;
		
		return $img_info;
	}
}

# end of script
